Many studies performed by institutions like Carnegie Mellon and vendors of static analysis tools have shown that software developers spend 20% to 25% of their time writing new code and the remaining 75% to 80% of their time either integrating their code with other developer's code or fixing errors in their own code. In either case, fixing all but the most trivial errors can take a long time, especially if the transaction spans multiple threads, processes or tiers. The problem gets even more complicated when these participating processes are running on multiple physical machines.